home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok58.lha
/
NPrint
/
txt
/
arp.def
next >
Wrap
Text File
|
1993-08-15
|
26KB
|
612 lines
(*---------------------------------------------------------------------------
:Program. ARP.def
:Author. M2 implementation by Fridtjof Siebert
:Address. Nobileweg 67, D-7-Stgt-40
:Shortcut. [fbs]
:Version. 1.01 (ARP version 39)
:Date. 10-11-90
:Copyright. PD
:Language. Modula-II
:Translator. M2Amiga v3.3d
:History. 30-Dec-88 v0.1 created for ARP1.0 [fbs]
:History. 14-Jan-88 v1.0 implementation for ARP1.1 [fbs]
:History 10-11-90 v1.01 implement a part for ARP1.3 Oliver Schersand
:Contents. Library Modul for arp.library.
:Remark. Contact me if your find errors. I wasn't able to all of it!
:Remark. Thanx to Martin Taillefer for his Benchmark ARP-code
:Bugs. Attention version v1.01 is wrong. I don`t changed all
:Bugs parts of ARP1.1. Please don`t use this version.
---------------------------------------------------------------------------*)
DEFINITION MODULE ARP {"arp.library",39};
FROM SYSTEM IMPORT ADDRESS, LONGSET, SHIFT, BPTR;
FROM Dos IMPORT DosLibrary, FileInfoBlock, FileInfoBlockPtr,
FileHandlePtr, FileLockPtr, ProcessPtr, DosPacketPtr,
DatePtr, BSTR, DeviceList, Date, InfoDataPtr;
FROM Exec IMPORT UByte, Byte, MinList, MinNode, MsgPortPtr, MemReqSet,
SignalSemaphore, TaskPtr, Node, Library, Message;
FROM Graphics IMPORT GfxBasePtr;
FROM Intuition IMPORT IntuitionBase, WindowPtr;
(*------ Some Pointers: ------*)
TYPE
STRPTR = ADDRESS; (* POINTER TO ARRAY OF CHAR, used for clarity *)
DeviceListPtr = POINTER TO DeviceList; (* can't be imported from DOS *)
(*------ Types needed for template: ------*)
StrArrayPtr = POINTER TO ARRAY [0..1000] OF STRPTR;
(* StrArrayPtr is a pointer to an array of pointers to strings *)
WBArgPtr = POINTER TO WBArg;
WBArg = RECORD
lock: FileLockPtr; (* a lock descriptor *)
str : STRPTR; (* a string relative to that lock *)
END;
CLIArgPtr = POINTER TO CLIArg;
CLIArg = RECORD
CASE : CARDINAL OF
0: bool: BOOLEAN; |
1: long: LONGINT; |
2: str: STRPTR; |
3: array: StrArrayPtr;|
END;
END;
(*------ Library Stuff: ------*)
(* use Wildcards/escapes like rest of world or like current dos: *)
ArpFlags = (wildWorld,wildBCPL);
ArpFlagSet = SET OF ArpFlags;
EnvBasePtr = POINTER TO EnvBase; (* Identical to EnvLibPtr *)
ArpBasePtr = POINTER TO ArpBase;
ArpBase = RECORD
libNode: Library; (* Standard library node *)
segList: BPTR; (* Pointer to segment list of loaded library *)
flags: Byte; (* Not used, yet! *)
escChar: CHAR; (* Character used for ESCaping *)
abreserved: LONGCARD; (* ArpLib's use only!! *)
envBase: EnvBasePtr; (* ptr to environment *)
dosBase: POINTER TO DosLibrary;
gfxBase: GfxBasePtr;
intuiBase: POINTER TO IntuitionBase;
resLists: MinList;
residentPrgList: ADDRESS; (* Resident Programs. *)
resPrgProtection: SignalSemaphore; (* Protection for above *)
END;
EnvBase = RECORD (* EnvBase *)
libNode: Library;
space: ADDRESS;
size: LONGCARD;
arpBase: ArpBasePtr;
END;
(* library constants: *)
CONST
arpname = 'arp.library';
arpversion = 39;
(*------ ARP Alert Numbers: ------*)
aoArpLib = 8036H; (* Alert Object *)
(* Alerts ARP can return *)
anArpLib = 03600000H;
anArpNoMem = 03610000H; (* ArpLibrary out of memory *)
anArpInputMem = 03610002H; (* No memory for input buffer *)
anArpNoMakeEnv = 83610003H; (* No memory for Environment library *)
anArpNoDOS = 83630001H; (* Can't Open DOS library *)
anArpNoGfx = 83630002H; (* Can't open Graphics library *)
anArpNoIntuit = 83630003H; (* Can't open Intuition library *)
anBadPackBlues = 83640000H; (* Bad packet returned to SendPacket() *)
anZombie = 83600003H; (* Zombie roaming around system *)
anArpScattered = 83600002H; (* Scatter loading not allowed *)
(*------ Return codes from Assign() and CompareLock(): ------*)
TYPE
AssignRes = (assignOK,assignNoDev,assignFatal,assignCancel);
LockComp = (equal,equalVolume,difVol1,difVol2);
CONST
maxInputBuf = 256; (* size of buffer needed for ReadLine() *)
(*------ Input structure for File Requester ------*)
fChars = 32;
dSize = 33;
longdSize = 254;
longfSize = 126;
frFirstGadg = 7680H;
TYPE
FileName = ARRAY[0..fChars] OF CHAR;
DirName = ARRAY[0..dSize] OF CHAR;
FileNamePtr = POINTER TO FileName;
DirNamePtr = POINTER TO DirName;
FileReqFlags = (listFunc,gEventFunc,addGadFunc,newWindFunc,newIDCMP,
doColor,doMsgFunc,doWildFunc);
FileReqFlagSet = SET OF FileReqFlags;
FileReqFlag2s = (longPath);
FileReqFlag2Set = SET OF FileReqFlag2s;
FileReqFunc = PROCEDURE(LONGCARD,ADDRESS): LONGINT; (* Please Test it *)
FileRequesterPtr = POINTER TO FileRequester;
FileRequester = RECORD
hail : STRPTR; (* Hailing text *)
file : FileNamePtr; (* Filename array (FCHARS+1) *)
dir : DirNamePtr; (* Directory array (DSIZE+1) *)
window : WindowPtr; (* Window requesting or NULL *)
funcFlags : FileReqFlagSet; (* Control. See above. *)
flags2 : FileReqFlag2Set; (* Set this to 0 *)
function : FileReqFunc; (* Your function, see btdef's *)
leftEdge,
topEddge : CARDINAL;
END;
(*------ Structures and constants used by the wildcard routines ------*)
CONST
pAny = 80H;
pSingle = 81H;
pOrStart = 82H;
pOrNext = 83H;
pOrEnd = 84H;
pTag = 85H;
pTagEnd = 86H;
pNotClass = 87H;
pClass = 88H;
pRepBeg = 89H;
pReqEnd = 8AH;
complexBit = 1; (* status bits *)
examineBit = 2;
errorBufferOverflow = 303; (* Returned by FindFirst() and FindNext(); *)
errorInternal = 999;
errorBreak = 304;
bufSize = 200;
dosTRUE = 0;
dosFALSE = -1;
maxFName = 200;
stdAnchorSize = 256;
TYPE
AChainPtr = POINTER TO AChain;
AnchorPathPtr = POINTER TO AnchorPath;
AnchorPathFlags = (doWild,itsWild,doDir,didDir,noMemErr,doDot);
AnchorPathFlagSet = SET OF AnchorPathFlags;
AnchorPath = RECORD (* this is used by FindFirst/FindNext *)
base : AChainPtr;
last : AChainPtr;
breakBits : LONGSET;
foundBreak : LONGSET;
flags : AnchorPathFlagSet;
res : Byte;
strLen : INTEGER;
info : FileInfoBlock;
END;
AChainFlags = (patternBit,examinedBit,completed,allBit);
AChainFlagSet = SET OF AChainFlags;
AChain = RECORD
child : AChainPtr;
parent : AChainPtr;
lock : FileLockPtr;
info : FileInfoBlockPtr;
flags : AChainFlagSet;
string : ARRAY [0..1] OF CHAR; (* don't use it *)
END;
(*------ Structure used by AddDANode etc.: ------*)
DirEntryTypes = (devices,diskonly,volumes,dirs,det4,det5);
DirEntryTypeSet = SET OF DirEntryTypes;
DirectoryEntryPtr = POINTER TO DirectoryEntry;
DirectoryEntry = RECORD
next: DirectoryEntryPtr;
type: DirEntryTypeSet;
flags: Byte;
name: ARRAY[0..255] OF CHAR; (* sorry, if your stuff gets longer! *)
END;
CONST
deFile = DirEntryTypeSet{}; (* 0 *)
deDir = DirEntryTypeSet{dirs}; (* 8 *)
deDevice = DirEntryTypeSet{det4}; (* 16 *)
deVolume = DirEntryTypeSet{dirs,det4}; (* 24 *)
deUnmounted = DirEntryTypeSet{det5}; (* 32 *)
deAssign = DirEntryTypeSet{dirs,det5}; (* 40 *)
(*------ Resource Tracking: ------*)
trakAAMem = 0; (* Default generic (ArpAlloc) element *)
trakLock = 1; (* File Lock *)
trakFile = 2; (* Opened File *)
trakWindow = 3; (* Window (see discussion) *)
trakScreen = 4; (* Screen *)
trakLibrary = 5; (* Opened library *)
trakDAMem = 6; (* Pointer to DosAllocMem block *)
trakMemList = 7; (* Exec Memlist *)
trakSegList = 8; (* Program Segment List *)
trakResList = 9; (* ARP (nested) ResList *)
trakMem = 10; (* Memory ptr/length *)
trakGeneric = 11; (* Generic Element *)
trakDAList = 12; (* DAlist ( as used by file request ) *)
trakAnchor = 13; (* Anchor chain *)
trakMax = 13; (* Anything else is tossed. *)
TYPE
ArpResListPtr = POINTER TO ArpResList;
ArpResList = RECORD
node: MinNode; (* line these together *)
taskID: TaskPtr;
firstItem: MinList;
link: ArpResListPtr; (* for temp removal from task rlist *)
END;
TrackedResPtr = POINTER TO TrackedRes;
TrackedRes = RECORD
node: MinNode;
flags: Byte;
lock: Byte;
id: INTEGER; (* see above *)
CASE :INTEGER OF
0:resource: ADDRESS;
value: LONGINT; |
1:function: PROC;
window2: WindowPtr; |
END;
user1 : ADDRESS; (* A pointer you can use yourself *)
user2 : LONGCARD; (* A long you can use yourself *)
END;
DefaultTrackerPtr = POINTER TO DefaultTracker;
DefaultTracker = RECORD
CASE : CARDINAL OF
|0: resource : ADDRESS; (* Whatever *)
|1: value : LONGCARD; (* For use during TrakGeneric *)
END;
CASE : CARDINAL OF
|0: function : PROC; (* Function to call for TrakGeneric *)
|1: window2 : WindowPtr; (* For TrakWindow *)
END;
user1 : ADDRESS; (* A pointer you can use yourself *)
user2 : LONGCARD; (* A long you can use yourself *)
END;
CONST
trbUnLink = 7; (* free node bit *)
trbReloc = 6; (* This element may be relocated *)
trbMoved = 5; (* Item moved *)
trvUnLink = SHIFT(1,trbUnLink);
trvReloc = SHIFT(1,trbReloc);
(*------ Errors returned by SyncRun() and ASyncRun(): ------*)
prbSAVEIO = 0; (* Don't free/check file handles on exit *)
prbCLOSESPLAT = 1; (* Close Splat file, must request explicitly *)
prbNOCLI = 2; (* Don't create a CLI process *)
prbINTERACTIVE = 3; (* This should be interactive *)
prbCODE = 4; (* Dangerous yet enticing *)
prbSTDIO = 5; (* Do the stdio thing, splat = CON:Filename *)
prfSAVEIO = SHIFT(1,0);
prfCLOSESPLAT = SHIFT(1,1);
prfNOCLI = SHIFT(1,2);
prfINTERACTIVE = SHIFT(1,3);
prfCODE = SHIFT(1,4);
prfSTDIO = SHIFT(1,5);
prNoFile = -1; (* Could not LoadSeg() the file *)
prNoMem = -2; (* No memory for something *)
prNoCLI = -3; (* Caller must be CLI (SyncRun() only) *)
prNoSlot = -4; (* No slot in TaskArray *)
prNoInput = -5; (* Could not open input file *)
prNoOutput = -6; (* Could not get output file *)
prNoLock = -7; (* Could not get a lock *)
prArgErr = -8; (* Bad argument *)
prNoBCPL = -9; (* Bad program passed to ASyncRun() *)
prBadLib = -10; (* Bad library version *)
prNoStdIO = -11; (* Couldn't get stdio handles. *)
errorNotCLI = 400; (* Program/function needs to be cli *)
errorBadMagic = 401; (* Invalid magic number for resident prg *)
noCMD = "\n";
(*------ ZombieMsg (sent back on request by exiting process): ------*)
TYPE
ZombieMsgPtr = POINTER TO ZombieMsg;
ZombieMsg = RECORD
message: Message; (* You must init ReplyPort!!!!! *)
taskNum: LONGCARD; (* Task ID *)
returnCode: LONGCARD; (* Process's return code *)
result2: LONGCARD; (* System return code *)
exitTime: Date; (* Date stamp at time of exit *)
userInfo: LONGCARD; (* For whatever you wish. *)
END;
PCBFlags = (saveIO, (* Don't release/check file handles *)
closeSplat, (* Close Splat file *)
noCLI, (* Don't create a CLI process *)
interactive, (* This should be interactive, CLI's only *)
code, (* Actual code ADDRESS, be CAREFUL! *)
stdIO); (* Do the StdIO thing, Splat = CON:FileName *)
PCBFlagSet = SET OF PCBFlags;
ProcessCtrlBlkPtr = POINTER TO PCB;
ProcessCtrlBlk = RECORD
stackSize: LONGCARD; (* Stack for new process *)
pri: Byte; (* Priority of new process *)
control: PCBFlagSet; (* Control bits *)
trapCode: ADDRESS; (* Optional Trap Code *)
input,output: FileHandlePtr; (* Optional stdin, stdout *)
CASE : CARDINAL OF
0: splatFile: FileHandlePtr; | (* File to use for Open("*") *)
1: conName: ADDRESS; | (* or CON: filename *)
2: console: ADDRESS; | (* Yippee for record variants! *)
END;
loadedCode: ADDRESS; (* If not null, will not load/unload code *)
lastGasp: ZombieMsgPtr; (* ReplyMsg() to be filled in by exit *)
wbProcess: MsgPortPtr; (* Valid when noerror and prbNOCLI is set *)
END;
(*------ Resident Program support: ------*)
TYPE
ResidentPrgNodePtr = POINTER TO ResidentProgramNode;
ResidentPrgNode = RECORD
next: ResidentPrgNodePtr;
usage: LONGINT; (* How many programs are currently using the code *)
checkSum: LONGCARD;
segment: BPTR; (* Actual LoadSeg'ed segments *)
name: ARRAY[0..255] OF CHAR; (* the names mem is allocated as needed !!! *)
END;
ResidentProgramTag = RECORD
nextSeg: BPTR; (* Provided by DOS at LoadSeg time. *)
bra: CARDINAL; (* Short branch to executable *)
magic: CARDINAL; (* Resident majik value *)
stackSize: LONGCARD; (* min stack for this process *)
dataSize: LONGCARD; (* Data size to allocate if resident *)
END;
ProcessMemoryPtr = POINTER TO ProcessMemory;
ProcessMemory = RECORD
node: Node;
num: CARDINAL; (* number of entries, 1 if no data 2 if data *)
stack: ADDRESS;
stackSize: LONGCARD;
data: ADDRESS; (* pointer to data *)
dataSize: LONGCARD;
END;
CONST
residentMagic = 4AFCH; (* same as RTC_MATCHWORD (trapf) *)
pMemName = "ARP_MEM";
(*------ String/Date Structures: ------*)
TYPE
DateType = (amigaDOS, (* dd-mmm-yy *)
international, (* yy-mm-dd *)
usa, (* mm-dd-yy *)
european); (* dd-mm-yy *)
DateTimeFlags = (subst, (* Substitute string such as "Today", ... *)
future); (* Monday, Tuesday ... refer to next week *)
DateTimeFlagSet = SET OF DateTimeFlags;
DateTimePtr = POINTER TO DateTime;
DateTime = RECORD
stamp: Date;
format: DateType;
flags: DateTimeFlagSet;
day: STRPTR;
date: STRPTR;
time: STRPTR;
END;
CONST
lenDateString = 10H;
(*------ Procedures: ------*)
PROCEDURE Open(name{1} : STRPTR;
accessMode{2} : LONGINT): FileHandlePtr; CODE -30;
PROCEDURE Close(file{1}: FileHandlePtr); CODE -36;
PROCEDURE Read(file{1}: FileHandlePtr;
buffer{2}: ADDRESS;
length{3}: LONGINT): LONGINT; CODE -42;
PROCEDURE Write(file{1}: FileHandlePtr;
buffer{2}: ADDRESS;
length{3}: LONGINT): LONGINT; CODE -48;
PROCEDURE Input(): FileHandlePtr; CODE -54;
PROCEDURE Output(): FileHandlePtr; CODE -60;
PROCEDURE Seek(file{1}: FileHandlePtr;
position{2}: LONGINT;
mode{3}: LONGINT): LONGINT; CODE -66;
PROCEDURE DeleteFile(name{1}: STRPTR): BOOLEAN; CODE -72;
PROCEDURE Rename(oldName{1},newName{2}: STRPTR): BOOLEAN; CODE -78;
PROCEDURE Lock(name{1}: STRPTR;
accessMode{2}: LONGINT): FileLockPtr; CODE -84;
PROCEDURE UnLock(lock{1}: FileLockPtr); CODE -90;
PROCEDURE DupLock(lock{1}: FileLockPtr): FileLockPtr; CODE -96;
PROCEDURE Examine(lock{1}: FileLockPtr;
infoBlock{2}: FileInfoBlockPtr): BOOLEAN; CODE -102;
PROCEDURE ExNext(lock{1}: FileLockPtr;
infoBlock{2}: FileInfoBlockPtr): BOOLEAN; CODE -108;
PROCEDURE Info(lock{1}: FileLockPtr;
parameterBlock{2}: InfoDataPtr): BOOLEAN; CODE -114;
PROCEDURE CreateDir(name{1}: STRPTR): FileLockPtr; CODE -120;
PROCEDURE CurrentDir(lock{1}: FileLockPtr): FileLockPtr; CODE -126;
PROCEDURE IoErr(): LONGINT; CODE -132;
PROCEDURE CreateProc(name{1}: STRPTR;
pri{2}: LONGINT;
segment{3}: BPTR;
stackSize{4}: LONGINT): ProcessPtr; CODE -138;
PROCEDURE Exit(returnCode{1}: LONGINT); CODE -144;
PROCEDURE LoadSeg(name{1}: STRPTR): BPTR; CODE -150;
PROCEDURE UnLoadSeg(segment{1}: BPTR); CODE -156;
PROCEDURE GetPacket(wait{1}: LONGINT): DosPacketPtr; CODE -162;
PROCEDURE QueuePacket(packet{1}: DosPacketPtr): LONGINT; CODE -168;
PROCEDURE DeviceProc(name{1}: STRPTR): ProcessPtr; CODE -174;
PROCEDURE SetComment(name{1},comment{2}: STRPTR): BOOLEAN; CODE -180;
PROCEDURE SetProtection(name{1}:STRPTR;
mask{2}:LONGSET): BOOLEAN; CODE -186;
PROCEDURE DateStamp(v{1}: DatePtr); CODE -192;
PROCEDURE Delay(ticks{1}: LONGINT); CODE -198;
PROCEDURE WaitForChar(file{1}: FileHandlePtr;
timeout{2}: LONGINT): BOOLEAN; CODE -204;
PROCEDURE ParentDir(lock{1}: FileLockPtr): FileLockPtr; CODE -210;
PROCEDURE IsInteractive(file{1}: FileHandlePtr): BOOLEAN; CODE -216;
PROCEDURE Execute(commandString{1}: STRPTR;
input{2}: FileHandlePtr;
output{3}: FileHandlePtr): LONGINT; CODE -222;
(*------ New ARP Routines: ------*)
PROCEDURE AddDADevs(dalist{8}: DirectoryEntryPtr;
select{0}: DirEntryTypeSet): LONGINT; CODE -516;
PROCEDURE AddDANode(data{8}: ADDRESS;
dalist{9}: DirectoryEntryPtr;
length{0}: LONGINT;
id{1}: DirEntryTypeSet): DirectoryEntryPtr; CODE -510;
PROCEDURE AddResidentPrg(segment{1}: BPTR;
name{8}: STRPTR): ResidentPrgNodePtr; CODE -582;
PROCEDURE ArpAlloc(size{0}: LONGINT): ADDRESS; CODE -384;
PROCEDURE ArpAllocMem(size{0}: LONGINT;
reqs{1}: MemReqSet): ADDRESS; CODE -390;
PROCEDURE ArpDupLock(lock{1}: FileLockPtr): FileLockPtr; CODE -402;
PROCEDURE ArpExit(returncode{0}: LONGINT;
fault{2}: LONGINT); CODE -378;
PROCEDURE ArpLock(name{1}: STRPTR;
accessMode{2}: LONGINT): FileLockPtr; CODE -408;
PROCEDURE ArpOpen(name{1}: STRPTR;
accessmode{2}: LONGINT): FileHandlePtr; CODE -396;
PROCEDURE Assign(name{8}: STRPTR;
phys{9}: STRPTR): AssignRes; CODE -336;
PROCEDURE ASyncRun(command{8}: STRPTR;
args{9}: STRPTR;
pcb{10}: ProcessCtrlBlkPtr): LONGINT; CODE -546;
PROCEDURE Atol(string{8}: STRPTR): LONGINT; CODE -258;
PROCEDURE BaseName(pathname{8}: STRPTR): STRPTR; CODE -630;
PROCEDURE BtoCStr(cstring{8}: STRPTR;
bstr{0}: BSTR;
maxlength{1}: LONGINT): LONGINT; CODE -354;
PROCEDURE CheckAbort(func{9}: PROC): LONGSET; CODE -270;
PROCEDURE CheckBreak(mask{1}: LONGSET;
func{9}: PROC): LONGSET; CODE -276;
PROCEDURE CheckSumPrg(node{1}: ResidentPrgNodePtr): LONGCARD; CODE -618;
PROCEDURE CloseWindowSafely(window{8}: WindowPtr;
morewindows{9}: BOOLEAN); CODE -300;
PROCEDURE CompareLock(lock1{0},lock2{1}: FileLockPtr): LockComp; CODE -456;
PROCEDURE CreatePort(name{8}: STRPTR;
priority{0}: Byte): MsgPortPtr; CODE -306;
PROCEDURE CreateTaskResList(): ArpResListPtr; CODE -468;
PROCEDURE CtoBStr(cstring{8}: STRPTR;
bstr{0}: BSTR;
maxlength{1}: LONGINT): LONGINT; CODE -360;
PROCEDURE DeletePort(port{9}: MsgPortPtr); CODE -312;
PROCEDURE DosAllocMem(size{0}: LONGINT): ADDRESS; CODE -342;
PROCEDURE DosFreeMem(memBlk{9}: ADDRESS); CODE -348;
PROCEDURE EscapeString(string{8}: STRPTR): LONGINT; CODE -264;
PROCEDURE FileRequest(filereq{8}: FileRequesterPtr): ADDRESS; CODE -294;
PROCEDURE FindCLI(tasknum{0}: LONGINT): ProcessPtr; CODE -420;
PROCEDURE FindFirst(pat{0}: STRPTR;
chain{8}: AnchorPathPtr): LONGINT; CODE -438;
PROCEDURE FindNext(chain{8}: AnchorPathPtr): LONGINT; CODE -444;
PROCEDURE FindTaskResList(): ArpResListPtr; CODE -462;
PROCEDURE FPrintf(file{0}: FileHandlePtr;
string{8}: STRPTR;
args{9}: ADDRESS): LONGINT; CODE -234;
PROCEDURE FreeAccess(tracker{9}: TrackedResPtr); CODE -498;
PROCEDURE FreeAnchorChain(chain{8}: AnchorPathPtr); CODE -450;
PROCEDURE FreeDAList(dalist{9}: ADDRESS); CODE -504;
PROCEDURE FreeResList(freelist{9}: ADDRESS); CODE -474;
PROCEDURE FreeTaskResList(): BOOLEAN; CODE -372;
PROCEDURE FreeTrackeItem(item{9}: TrackedResPtr); CODE -480;
PROCEDURE GADS(cmdLine{8}: ADDRESS;
cmdLen{0}: LONGINT;
help{9}: STRPTR;
argarray{10}: ADDRESS;
tplate{11}: STRPTR): LONGINT; CODE -252;
PROCEDURE GetAccess(tracker{9}: TrackedResPtr): TrackedResPtr; CODE -492;
PROCEDURE GetDevInfo(devinfo{10}: DeviceListPtr): DeviceListPtr; CODE -366;
PROCEDURE GetEnv(string{8}: STRPTR;
buffer{9}: ADDRESS;
size{0}: LONGINT): STRPTR; CODE -282;
PROCEDURE GetTracker(id{9}: LONGINT): DefaultTrackerPtr; CODE -486;
PROCEDURE InitStdPacket(action{0}: LONGINT;
args{8}: ADDRESS;
packet{9}: ADDRESS;
replyport{10}: MsgPortPtr); CODE -324;
PROCEDURE LDiv(dividend{0},divisor{1}: LONGINT): LONGINT; CODE -606;
PROCEDURE LMod(dividend{0},divisor{1}: LONGINT): LONGINT; CODE -612;
PROCEDURE LMult(num1{0},num2{1}: LONGINT): LONGINT; CODE -600;
PROCEDURE LoadPrg(name{1}: STRPTR): BPTR; CODE -552;
PROCEDURE ObtainResidentPrg(name{8}: STRPTR): ResidentPrgNodePtr;CODE -576;
PROCEDURE PathName(lock{0}: FileLockPtr;
dest{8}: STRPTR;
numberNames{1}: LONGINT): LONGINT; CODE -330;
PROCEDURE PatternMatch(pat{8}: STRPTR;
str{9}: STRPTR): BOOLEAN; CODE -432;
PROCEDURE PreParse(source{8}: STRPTR;
dest{9}: STRPTR): BOOLEAN; CODE -558;
PROCEDURE Printf(string{8}: STRPTR;
args{9}: ADDRESS): LONGINT; CODE -228;
PROCEDURE Puts(string{9}: STRPTR): LONGINT; CODE -240;
PROCEDURE QSort(baseptr{8}: ADDRESS;
regionsize{0}: LONGINT;
bytesize{1}: LONGINT;
userfunction{9}: PROC): BOOLEAN; CODE -426;
PROCEDURE ReadLine(buffer{8}: ADDRESS): LONGINT; CODE -246;
PROCEDURE ReleaseResidentPrg(segment{1}: ADDRESS):
ResidentPrgNodePtr; CODE -636;
PROCEDURE RemResidentPrg(name{8}: STRPTR): LONGCARD; CODE -588;
PROCEDURE RListAlloc(reslist{8}: ArpResListPtr;
size{0}: LONGINT): ADDRESS; CODE -414;
PROCEDURE SendPacket(action{0}: LONGINT;
args{8}: ADDRESS;
handler{9}: MsgPortPtr): LONGINT; CODE -318;
PROCEDURE SetEnv(string{8}: STRPTR;
buffer{9}: ADDRESS): BOOLEAN; CODE -288;
PROCEDURE StampToStr(datetime{8}: DateTimePtr): BOOLEAN; CODE -564;
PROCEDURE Strcmp(s1{8},s2{9}: STRPTR): LONGINT; CODE -522;
PROCEDURE Strncmp(st{8},s2{9}: STRPTR;
n{0}: LONGINT): LONGINT; CODE -528;
PROCEDURE StrToStamp(datetime{8}: DateTimePtr): BOOLEAN; CODE -570;
PROCEDURE SyncRun(filename{8}: STRPTR;
args{9} : STRPTR;
input{0} : FileHandlePtr;
output{1} : FileHandlePtr): LONGINT; CODE -540;
PROCEDURE TackOn(pathname{8},filename{9}: STRPTR); CODE -624;
PROCEDURE ToUpper(old{0}: CHAR): CHAR; CODE -534;
PROCEDURE UnLoadPrg(segment{1}: BPTR); CODE -594;
END ARP.